#1.导包
import pymysql

#2.创建类方法
class PM1:
    # 创建连接
    @classmethod
    def __get_conn(cls):
        cls.conn = pymysql.connect(host="localhost",
                               port=3306,
                               user="root",
                               password="root",
                               database="books",
                                # 使用if语句无法提交事务，所以只能在连接时打开事务
                                autocommit=True)
        return cls.conn

    # 获取游标
    @classmethod
    def __get_cursor(cls):
        cls.cursor = cls.__get_conn().cursor()
        return cls.cursor

    # 执行sql
    @classmethod
    def exe_sql(cls, sql):
        try:
            # 获取对象游标
            cursor = cls.__get_cursor()
            # 调用游标对象的execute方法，执行sql
            cursor.execute(sql)
            # 如果是查询
            if sql.split()[0].lower() == "select":
                # 返回所有数据
                return cursor.fetchall()
            # 否则
            else:
                # 返回提交事务的数据条数
                return cursor.rowcount
        except Exception as e:
            # 事务回滚
            cls.__get_conn().rollback()
            # 打印异常信息
            print(e)
        finally:
            # 关闭游标
            cls.__close_cursor()
            # 关闭连接
            cls.__close_conn()

    #关闭游标
    @classmethod
    def __close_cursor(cls):
        cls.cursor = cls.__get_cursor()
        if cls.cursor:
            cls.cursor.close()
            cls.cursor = None

    #关闭连接
    @classmethod
    def __close_conn(cls):
        cls.conn = cls.__get_conn()
        if cls.conn:
            cls.conn.close()
            cls.conn = None